iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0

今天我們要透過試算表來發送團隊開會行事曆

程式碼解析

function createTeamMeetings() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Meetings");
  if (!sheet) {
    Logger.log("找不到 Meetings 工作表!");
    return;
  }

SpreadsheetApp.getActiveSpreadsheet():取得目前開啟的 Google 試算表。
getSheetByName("Meetings"):取得名稱為 Meetings 的工作表。
如果找不到該工作表,sheet 就是 null,程式會進入 if (!sheet),印出訊息並停止,避免後續操作出錯。


  var lastRow = sheet.getLastRow();
  var calendar = CalendarApp.getDefaultCalendar(); // 可改成特定日曆 ID

  for (var i = 2; i <= lastRow; i++) {
    var date = sheet.getRange(i, 1).getValue();
    var startTime = sheet.getRange(i, 2).getValue();
    var endTime = sheet.getRange(i, 3).getValue();
    var title = sheet.getRange(i, 4).getValue();
    var guests = sheet.getRange(i, 5).getValue();
    var location = sheet.getRange(i, 6).getValue();

    // 將日期+時間組成 Date 物件
    var startDateTime = new Date(date);
    startDateTime.setHours(startTime.getHours());
    startDateTime.setMinutes(startTime.getMinutes());

    var endDateTime = new Date(date);
    endDateTime.setHours(endTime.getHours());
    endDateTime.setMinutes(endTime.getMinutes());

    // 建立活動
    var event = calendar.createEvent(title, startDateTime, endDateTime, {
      location: location,
      guests: guests,
      sendInvites: true
    });

    Logger.log("已新增會議:" + title + " - " + startDateTime);//每新增一個會議就印出訊息,方便追蹤程式運行結果。
  }
}

getRange(i, col).getValue():讀取該列該欄的資料,對應試算表欄位:
1.日期
2.開始時間
3.結束時間
4.主題
5.參與者 Email(多個用逗號分隔)
6.地點或會議連結

Google Calendar 需要 Date 物件作為活動時間。
將試算表中的日期和時間合併成完整的 startDateTime 與 endDateTime。
setHours() 和 setMinutes():把時間資訊加到日期上。

createEvent(title, start, end, options):在日曆新增活動。
location:活動地點或會議連結。
guests:邀請的參與者,支援多個 email,用逗號分隔。
sendInvites: true:自動寄邀請信給所有參與者。

結果

https://ithelp.ithome.com.tw/upload/images/20250820/20169466kOKIFLrgcX.png
https://ithelp.ithome.com.tw/upload/images/20250820/20169466z2aLDzJKyN.jpg


上一篇
D9 自動發信系統實作
下一篇
D11 出缺席查詢
系列文
Google App Script雲端自動化與動態網頁實戰20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言